//
//  JTTopic.m
//  百思不得姐
//
//  Created by Robin Zhang on 2017/1/6.
//  Copyright © 2017年 BeiJingWangDianJieTong. All rights reserved.
//

#import "JTTopic.h"
#import "JTComment.h"
#import "JTUser.h"
#import <AVFoundation/AVFoundation.h>

@interface JTTopic ()

/** 是否允许下载音频 */
@property (nonatomic, assign, getter=isAllowedDownload) BOOL allowerDownload;

@end

@implementation JTTopic

#pragma mark - 其他
static NSDateFormatter *fmt_;
static NSCalendar *calendar_;

/**
 第一次调用JTTopic这个类的时候调用一次，且只会调用一次
 */
+ (void)initialize {
    [super initialize];
    
    fmt_ = [[NSDateFormatter alloc] init];
    calendar_ = [NSCalendar jt_calendar];
}

- (instancetype)init {
    
    if (self = [super init]) {
        
        [self setEnabled:YES];
    }
    return self;
}

// 重写getter方法，这个模型的属性值并不会改变
- (NSString *)created_at {
    
    // 获得发帖日期
    [fmt_ setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    NSDate *createAtDate = [fmt_ dateFromString:_created_at];
    
    if (createAtDate.jt_isThisYear) { // 今年
        
        if (createAtDate.jt_isToday) { // 今天
            
            // 手机当前时间
            NSDate *nowDate = [NSDate date];
            
            // 获得日期之间的间隔
            NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
            NSDateComponents *cmps = [calendar_ components:unit fromDate:createAtDate toDate:nowDate options:0];
            
            if (cmps.hour >= 1) { // 时间间隔 >= 1小时
                
                return [NSString stringWithFormat:@"%ld小时前", cmps.hour];
            }
            else if (cmps.minute >= 1) { // 1小时 > 时间间隔 > 1分钟
                
                return [NSString stringWithFormat:@"%ld分钟前", cmps.minute];
            }
            else { // 时间间隔 < 1分钟
                
                return @"刚刚";
            }
        }
        else if (createAtDate.jt_isYesterday) { // 昨天
        
            [fmt_ setDateFormat:@"昨天 HH:mm:ss"];
            return [fmt_ stringFromDate:createAtDate];
        }
        else { // 其他
            
            [fmt_ setDateFormat:@"MM-dd HH:mm:ss"];
            return [fmt_ stringFromDate:createAtDate];
        }
    }
    else { // 非今年
        
        return _created_at;
    }
}

/** NAN错误(Not A Number):原因是 0 当做除数 */
- (CGFloat)cellHeight {
    
    if (_cellHeight) return _cellHeight;
    
    // 1.头像
    _cellHeight = 55;
    
    // 2.文字
    CGFloat textMaxWidth = JTScreenWidth - 2 * JTMargin;
    CGSize textMaxSize = CGSizeMake(textMaxWidth, MAXFLOAT);
    CGSize textSize = [self.text boundingRectWithSize:textMaxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:15.0f]} context:nil].size;
    _cellHeight += textSize.height + JTMargin;
    
    // 3.中间的内容
    if (self.type != JTTopicTypeWord) { // 如果是图片/声音/视频才需要计算中间内容的高度
        
        // 中间内容的宽度 == 中间内容的宽度 * (图片的真实高度 / 图片的真实宽度)
        CGFloat contentHeight = textMaxWidth * (self.height / self.width);
        
        if (contentHeight > JTScreenHeight/* && !self.is_gif*/) { // 超长图片 (后面的取消，动图也有长的)&& 不是动图gif
            
            // 将超长图片的高度变为200
            contentHeight = 200;
            [self setBigPicure:YES];
        }
        
        // 这里的cellHeight就是中间内容的y值
        self.contentFrame = CGRectMake(JTMargin, _cellHeight, textMaxWidth, contentHeight);
        
        // 累加中间内容的高度
        _cellHeight += contentHeight + JTMargin;
    }
    
    // 4.最热评论
    if (self.top_cmt) { // 如果有最热评论
     
        // 最热评论 - 标题
        _cellHeight += 20;
        // 最热评论 - 内容
        NSString *content = self.top_cmt.content;
        if (self.top_cmt.voiceuri.length) {
            
            content = @"[语音评论]";
        }
        
        NSString *topCmtContent = [NSString stringWithFormat:@"%@:%@", self.top_cmt.user.username, content];
        CGSize topCmtSize = [topCmtContent boundingRectWithSize:textMaxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:14.0f]} context:nil].size;
        _cellHeight += topCmtSize.height + JTMargin;
    }
    
    // 5.底部 - 工具条
    _cellHeight += 35 + JTMargin;
    
    return _cellHeight;
}

/** 音乐播放器 */
- (void)setUpAudioPlayerWithDelegate:(id <AVAudioPlayerDelegate>)delegate completion:(void (^)(AVAudioPlayer * _Nonnull))completion {
    
    if (self.audioPlayer) {
        
        [self.audioPlayer setDelegate:delegate];
        if (completion) {
            
            completion(self.audioPlayer);
        }
        return;
    }
    
    [self setEnabled:NO];
    [self setAllowerDownload:YES];
    
    JTWeak(self)
    dispatch_async(dispatch_get_global_queue(0, 0), ^{ // 异步子线程加载数据
        
        // 请求数据
        NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:weak_self.voiceuri]];
        
        if (!data) return;
        
        // 生成音乐播放器
        weak_self.audioPlayer = [[AVAudioPlayer alloc] initWithData:data error:nil];
        [weak_self.audioPlayer setDelegate:delegate];
        
        [weak_self setEnabled:YES];
        
        if (!weak_self.isAllowedDownload) return;
        
        dispatch_async(dispatch_get_main_queue(), ^{
            
            if (completion) completion(weak_self.audioPlayer);
            
            [weak_self.audioPlayer play];
            [[NSNotificationCenter defaultCenter] postNotificationName:JTVoiceDidDownloadNotification object:self];
        });
    });
}

/** 停止播放 */
- (void)pauseVoicePlay {
    
    if (self.audioPlayer) [self.audioPlayer pause];
    [self setAllowerDownload:NO]; // 停止播放
    [self setEnabled:YES];
}

@end
